(for Internet Explorer)
#!/bin/bash -xe
                  #// -x option echos commands
                  #// -e option does not continue, if error was raised

if [ -e ~/reset_env.sh ]; then  source ~/reset_env.sh  ;fi
export              WORK="$HOME/work"
export  w_DownloadFolder="$WORK/download"
export  w_XWindowPackage="$w_DownloadFolder/X11R7.5_110527.tar.bz2"
export   w_XWindowFolder="$WORK/X11R7.5"
#//(end of export)

folder=${w_XWindowFolder%/*}  #// parent folder
if [ ! -e "$folder" ]; then  mkdir -p  "$folder"  ;fi
cd  "$folder"
if [ -e "$w_XWindowFolder" ]; then  rm -r "$w_XWindowFolder"  ;fi
tar xvf  "$w_XWindowPackage"

echo  "Created   $w_XWindowFolder"
参考
X11R7.5_110527.tar.bz2
X11R7.5
w_XWindowPackage
w_XWindowFolder
sudo apt-get install p7zip-full
インストール (ubuntu)
解凍
7za x -so a.7z | tar xf -
7za x -so
| tar xf -
解凍が始まらないときは、
7za x a.7z
tar xvf a.tar
ホームページに .gz ファイルがある場合、自動的に展開しますが、
wget では自動的に展開しません。
どちらも、ダウンロードしたファイルは、.gz 拡張子が付いたままになるので
ファイル名から展開済みかどうかは判定できません。

gunzip コマンドを実行して、エラーを無視するようにしてください。
gunzip で展開すると、展開前の圧縮ファイルが消えてしまいます。
gzip で圧縮すると、圧縮前のファイルが消えてしまいます。
このため、gz ファイルをマスターファイルとして扱おうとすると、
いつのまにか消えてしまう危険があります。
$ unzip -l 1GB.zip
Archive:  1GB.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
1279152000  09-28-11 09:54   1GB.txt
      125  09-28-11 09:51   batch.bat
 --------                   -------
1279152125                   2 files
パスのみ表示するには、sed も同時に使います。
$ unzip -l a.zip | sed -e "1,3d" -e '/^ ---/,$d' -e "s/.*:[0-9]* *//"
1GB.txt
batch.bat
md5sum
#!/bin/bash -xe
                  #// -x option echos commands
                  #// -e option does not continue, if error was raised

export  w_Arvhice="arvhice.tar.7z"
export   w_md5sum="$w_Arvhice.md5sum.txt"

md5sum  "./$w_Arvhice" > md5sum_out.txt
diff  "md5sum_out.txt"  "$w_md5sum"
if [ "$?" == "0" ]; then  echo  "OK" ; rm  "md5sum_out.txt"  ;fi
arvhice.tar.7z
MD5 の値が正しいかチェックします。
$w_Arvhice.md5sum.txt
カレント・ディレクトリに arvhice.tar.7z ファイルと、arvhice.tar.7z.md5sum.txt ファイル
をコピーして、下記のスクリプトを実行してください。
合っていれば、OK と表示されます。
※ echo "OK" の前の if は、bash -e オプションによって中断するため要らないが、
  分かりやすさのために書いています。
参考
を開いて、パッケージ名を使ってページ内を検索します。
または、そのページにある All GNU packages の章から探します。
GNU 製のパッケージの多くは、apt-get でもインストールできますが、ソースからインストール
したいときは、次の手順で行います。
その先は、パッケージによって内容は大きく異なります。
ダウンロードへのリンクがないときは、
Linux アプリケーション
VNC
VNC 単体では、サーバーからログインしないと接続できません。
リモートデスクトップの Linux 版
X Window System上で動くデスクトップ環境
ファイルマネージャ
このボタンを押すと、絶対パスが表示され、コピー&ペーストできます。
関連
→ X(Window)
でも、使えます。
nautilus
X Window over ssh
シェルから
ls
ファイルを一覧する
テキストファイルの内容を見る
テキストエディタ
端末で [Tab] キーを押すと、ファイル名が補完されます。
ファイルコピー、-rp オプションでフォルダコピー。sudo が必要な場合もあり。
mkdir
フォルダの作成。 -p オプションで、連続作成
コマンドの前に sudo をつけると、スーパーユーザーで実行します。
ただし、パスワードの入力を要求されます。(要・端末)
rm
ファイルの削除、-r オプションでフォルダの削除
mv
移動。移動先がフォルダならその中へ。
移動元と移動先が同じフォルダでないと改名できない。
/usr/local/bin は、デフォルトでパスが通っています。
ディストリビューションの /usr/local/bin には、何も入っていません。
検索、フィルタ
コマンドのヘルプを表示します。
端末を開く(ubuntu)
[ アプリケーション | アクセサリ | 端末 ]
リンクを作成する
リモート端末
関連
PATH=$HOME/tools:$PATH
PATH を追加するときは、次のようにコロン(:)で区切ります。
which  (command)
コマンドを入力したときに実行される実行ファイルの場所が、PATH の中のどこに
ヒットしているかは、which コマンドで確認できます。
ただし、表示されたパスは、シンボリックリンクの可能性もあります。
add_path=`readlink -f .`
case $PATH in *$add_path*);; *) PATH=$add_path:$PATH; esac
カレント・フォルダーが PATH に含まれていなかったら追加する。
echo $TERM
端末の種類は、TERM 環境変数で確認できます。 emacs や vi は、この変数を参照しています。
echo $SHELL
"/bin/bash"
"xterm"
… dash では、差別を避けるためか bash に設定されています
ls -l /bin/sh
/bin/sh -> dash
… こちらの方が正確
sudo dpkg-reconfigure -plow dash
dash と bash を切り替える
上記を実行すると、/bin/sh を dash にするか bash にするか選ぶことができます。
「はい」を選ぶと dash、「いいえ」を選ぶと bash になります。
シェル・スクリプト・ファイルの先頭が #!/bin/bash であれば、bash が使われています。
→ コマンドラインの引数とエスケープ (DOS)
関連
#include <stdio.h>

int main(int argc, char const* argv[]) {
  int i;
  for (i = 1; i < argc; i++) {
    printf("[%s]\n", argv[i]);
  }
  return 0;
}
$./a.out '$TERM'
[$TERM]    ... シングルクォートでは、変数が展開されません。

$./a.out "$TERM"
[xterm]    ... ダブルクォートでは、変数が展開されます。

$./a.out '\\'
[\\]    ... シングルクォートでは、エスケープされません。

$./a.out "\\"
[\]     ... ダブルクォートでは、エスケープされます。

$./a.out "\""
["]

$./a.out "\n"
[\n]     ... ダブルクォートでも、\\, \" 以外はエスケープされません。
             エスケープされないときでも、\ が無くなることはありません。

$./a.out \n
[n]      ... 囲んでいないときは、エスケープされます。

$./a.out \ a
[ a]     ... 囲んでいないときは、空白もエスケープされます。

$./a.out "\ a"
[\ a]

$./a.out -a b
[-a]     ... オプション形式も、そのまま渡ります。
[b]

$./a.out \-a
[-a]

$./a.out "\-a"
[\-a]
実験用 C 言語ソース
実験結果
; & ( ) | ^ < > ? * [ ] $ ` " ' { } [TAB] [SPACE]
エスケープが必要な文字
command arg1 arg2 ...
コマンドラインに入力するとき、コマンド名に続いて、任意の数のパラメーターを並べます。
オプションの指定方法は、- に続けてオプション名を入力し、パラメーターを持つオプションは、
スペースで区切った後に入力します。
command -a arg1 -b b_param arg2
-a がパラメーターを持たないオプションであれば、arg1 は -a オプションのパラメーターでは
ありません。
-b がパラメーターを持つオプションであれば、b_param は -b オプションのパラメーターです。
パラメーターの区切りと、オプションとパラメーターの間の区切りが、どちらもスペースであるという
ややこしい仕様であるため、コマンドのパラメーターであるか、オプションのパラメーターであるかは、
それぞれのオプションの仕様を確認する必要があります。
#!/bin/bash -e

#//=== parse command line options
g_AllArguments="$@"
if [ "$1" == "--help" ]; then
  g_IsHelp="1"  ; shift  1
else
  unset  g_IsAOption
  unset  g_BOptionValue
  while getopts "ab:" OPT ;do
    case $OPT in
      "a" ) g_IsAOption="1" ;;
      "b" ) g_BOptionValue="$OPTARG" ;;
      "?" ) unset ERROR;${ERROR:?unknown option or no option parameter} ;;
    esac
  done
  shift  $(($OPTIND - 1))
fi

#//=== using option values
if [ "$g_IsHelp" == "1" ]; then
  echo  "help"
else
  echo  "g_IsAOption=$g_IsAOption"
  echo  "g_BOptionValue=$g_BOptionValue"
  echo  "1=$1"
  echo  "others=$*"
fi
参考
getopts の引数に、短いオプション名を並べます。
パラメーターを取るオプションは、オプション名の後に : を付けます。
shift  $(($OPTIND - 1)) すると、$* の内容が、オプション以外になります。
$~/temporary.sh  -a -b boys value1 value2
g_IsAOption=1
g_BOptionValue=boys
1=value1
others=value1 value2
$~/temporary.sh  --help
help
~/temporary.sh
実行例
getopts は、関数の中では使えません。
コマンドラインのオプションに指定した値を取得します。
2文字以上のオプション名には対応していません。
-r, -r param  #// POSIX 形式、Unix98 形式
r,  r param   #// BSD 形式
--reverse, --reverse=param  #// GNU 形式
Linux 系のオプションの書式は、いくつかあります。
getopt 関数 (gcc)
参考
//グローバル変数
extern char* optarg;   // オプション引数
extern int optind;     // 次に解析する argv の配列番号
extern int opterr;     // 0を設定すると、エラーメッセージを出力しない
extern int optopt;     // エラーが発生したオプション文字
int  main( int argc, char* argv[] )
{
  int  opt;

  for (;;) {
    opt = getopt( argc, argv, "ab:" );
    if ( opt == -1 ) break;
    switch ( opt ) {
      case 'a':  printf( "-a\n" );  break;
      case 'b':  printf( "-b %s\n", optarg );  break;
      case '?':  // その他オプション
    }
  }
2文字以上のオプションは、getopt_long や getopt_long_only を使う
(cache)
user1@ubuntu:~$ ./a.out \\-a -b c d e
opt='b' optarg=c optind=4
opt='-1' optind=3
[-b]
[c]
[\-a]
[d]
[e]
#include <stdio.h>
#include <getopt.h>

int main(int argc, char* argv[]) {
  int i;
  int  opt;

  for (;;) {
    opt = getopt( argc, argv, "ab:" );
    if ( opt == -1 ) break;
    printf( "opt='%c' optarg=%s optind=%d\n", opt, optarg, optind );
  }
  printf( "opt='-1' optind=%d\n", optind );

  for (i = 1; i < argc; i++) {
    printf("[%s]\n", argv[i]);
  }
  return 0;
}
getopt の動き
オプションが、オプションではない引数の後になった場合、opt=-1 になると、
argv の要素が入れ替わります。
標準入出力をファイルに接続します。 つまり、キーボードから入力する代わりに
ファイルの内容を入力したり、画面に出力する代わりにファイルに出力します。
2>&1 を書かないと、標準エラー出力を取りこぼしてしまいます。
echo a > sample X    2>&1
関連
echo a >&2
… 標準エラー出力へ
/dev/stdin ファイルが、標準入力(仮想的なデバイス)を表しています。
/dev/stdin ファイルを指定すると、シェルから入力した内容が、ファイルの内容として
扱われます。
$ cp  /dev/stdin  ~/a.txt
This is text
^C
$ type ~/a.txt
This is text
シェルから次のように入力すると、ファイルコピーの代わりに、シェルから入力した
内容がファイルに格納されます。
ln -s /dev/console /dev/stdin
sudo ln -s /proc/self/fd/0 /dev/stdin
/dev/stdin が無いときは、次のようにすれば作成できます。
/dev/console がある場合:
/proc/self/fd がある場合:
参考
echo 'test' 2>&1 | sudo tee ~/temp.txt
リダイレクトの代わりに、sudo tee を使います。
echo a > /dev/null
… a を表示しない
保存するファイル名を指定するときは、" " や ' ' で囲むとエラーになります。
空白を含むファイル名を指定するときは、\ でエスケープしてください。
echo a > sample\ X   2>&1
… sample X ファイルができる
echo a > sample X    2>&1
… sample ファイルができる
… " " で囲むとエラーになる
echo a > "sample X"  2>&1
(from man sh)
The following redirection is often called a “here-document”.
           [n]<< delimiter
                 here-doc-text ...
           delimiter
All the text on successive lines up to the delimiter is saved away and
made available to the command on standard input, or file descriptor n if
it is specified.  If the delimiter as specified on the initial line is
quoted, then the here-doc-text is treated literally, otherwise the text
is subjected to parameter expansion, command substitution, and arithmetic
expansion (as described in the section on “Expansions”).  If the operator
is “<<-” instead of “<<”, then leading tabs in the here-doc-text are
stripped.
echo a  > sample.txt
a と表示する代わりに sample.txt ファイルに出力します。
read -p "prompt>" VAR  < input.txt
キーボード入力の代わりに input.txt の
内容を入力します。
command <<delimiter
text
text
delimiter
<< を指定すると、標準入力に入力する内容を、コマンドラインの中に記述することが
できます。

delimiter (終端文字列)は、任意の単語に置き換えることができますが、このように
なっているのは、適切な単語が使えるようにするためではなく、テキストと  delimiter
が衝突しないようにするためです。 通常は下記のように HereDocument  にして、
ネットでキーワード検索ができるようにしておきます。

テキストの行頭に、空白文字を入れると、空白文字を含んだテキストになるので、
インデントした記述ができないことに注意してください。
サンプル
cat  >> sample.h  <<HereDocument
#define  A  1
#define  B  1
HereDocument
sample.h ファイルに、#define  A  1 と #define  B  1 を追記します。
while read from_file 0<&3 ;do
  echo  $from_file
  read  from_stdin
  echo  $from_stdin
done  3< input.txt
exec  3>-             #// close fd5
プログラム
キーボード
画面
fd0=stdin : 標準入力
fd1=stdout : 標準出力
fd2=stderr : 標準エラー出力
リダイレクトを使わない通常の場合、
ですが、> を記述すると fd1 の行き先がファイルになります。
< を記述すると fd0 の出発点がファイルになります。
標準出力(fd1)と、標準エラー出力(fd2)以外に、独自の種類の入出力として、3以上の
ファイル記述子を使うことができます。 たとえば、ファイル記述子5を、詳細ログという
種類であるとして、command.log に出力するときは、次のように記述します。
exec  5>command.log   #// fd5 is details of log
echo  abc  >&5
exec  5>-             #// close fd5
参考
ただし、このような用途のためだけであれば、出力ファイル名を環境変数にした方が
分かりやすいでしょう。
echo  abc  > $log
入力にもナンバー3以上のファイル記述子が使えます。 下記のコードは、キーボード
入力と、ファイル input.txt による入力を、1行ずつ交互に入力します。 (使い道は
よく分かりません。)
参考
if [ "1" == "1" ] ; then
  echo  abc
  echo  def
fi  > command.log
ブロックの中で行われる echo 出力は、
すべて command.log にリダイレクトされます。
while, do 〜 done ブロックでも使えます。
関連
expr a + 1 > /dev/null  2>&1
… 標準エラー出力も表示しない
参考
diff  <( cat "a.txt" )  <( cat "b.txt" )
ls | grep "a.txt"
ファイルを指定するところに、コマンドの実行を代わりに指定することができます。
上記は、下記と同じですが、上記の grep は、サブシェルにはなりません。
grep "a.txt" < <( ls )
リダイレクトする内容のファイルを指定するところにも使えます。